package com.starleague.battletech.unit.mech;

import java.util.Collection;

public interface IMechHitLocationArm
        extends IMechHitLocation
{
    Collection<? extends IMechActuator> getActuators();
}
//
// // public Set<Actuator> getActuatorSet() { return this.actuator_set; }
//
// public Arm(
// final Mech i_mech,
// final OPTIONAL_ACTUATORS i_optional_actuators,
// final MechInternalStructure i_mech_internal_structure,
// final int i_armor_points) throws BattletechException
// {
// super(i_mech,
// MechHitLocation.TYPE.ARM,
// i_mech_internal_structure,
// i_armor_points);
//
// AddActuator(new Actuator(Actuator.TYPE.SHOULDER));
// AddActuator(new Actuator(Actuator.TYPE.UPPER_ARM));
//
// switch (i_optional_actuators)
// {
// case LOWER_ARM_AND_HAND:
// AddActuator(new Actuator(Actuator.TYPE.LOWER_ARM));
// AddActuator(new Actuator(Actuator.TYPE.HAND));
// break;
//
// case LOWER_ARM:
// AddActuator(new Actuator(Actuator.TYPE.LOWER_ARM));
// break;
//
// case NEITHER:
// break;
// }
// }
//
// // TODO: Load actuator states
// public Arm(
// final Mech i_mech,
// final OPTIONAL_ACTUATORS i_optional_actuators,
// final MechInternalStructure i_mech_internal_structure,
// final int i_internal_structure_points,
// final int i_armor_points) throws BattletechException
// {
// super(i_mech,
// MechHitLocation.TYPE.ARM,
// i_mech_internal_structure,
// i_internal_structure_points,
// i_armor_points);
//
// AddActuator(new Actuator(Actuator.TYPE.SHOULDER));
// AddActuator(new Actuator(Actuator.TYPE.UPPER_ARM));
//
// switch (i_optional_actuators)
// {
// case LOWER_ARM_AND_HAND:
// AddActuator(new Actuator(Actuator.TYPE.LOWER_ARM));
// AddActuator(new Actuator(Actuator.TYPE.HAND));
// break;
//
// case LOWER_ARM:
// AddActuator(new Actuator(Actuator.TYPE.LOWER_ARM));
// break;
//
// case NEITHER:
// break;
// }
// }
//
// //
// //
// //
//
// private void AddActuator(final Actuator i_actuator)// throws BattletechException
// {
// this.addCriticalSlot(i_actuator, i_actuator.getNumCriticalSlots());
// this.actuator_list.add(i_actuator);
// }
//
// // Required to populate this.hex_array_2d[][] after it is loaded from the DB
// protected static class PersistHandler
// {
// @PostLoad
// public void OnPostLoad(Arm arm) throws Error // Can ONLY throw 'Error', not Exceptions
// {
// for (Actuator actuator : arm.actuator_list)
// arm.addCriticalSlot(actuator, actuator.getNumCriticalSlots());
// }
//
// public PersistHandler() {}
// }
//
// @OneToMany(cascade=CascadeType.ALL)
// private List<Actuator> actuator_list = new ArrayList<Actuator>();
// }

//
// Arm(final SerialObject.SerialManager i_sobject_manager,
// final Arm.SerialData i_arm_data,
// final Set<Actuator> i_actuator_set)// throws BattletechException
// {
// super(i_sobject_manager, i_arm_data);
//
// // Have to pass in the Deserialized Actuators, as we need them constructed BEFORE calling super()
// for(Actuator actuator : i_actuator_set)
// AddActuator(actuator);
// }
// //
// //
// //
//
// public Arm.SerialData Serialize(final SerialObject.SerialManager i_sobject_manager)
// {
// return new Arm.SerialData(i_sobject_manager, this);
// }
//
// public static class SerialData extends HitLocation.SerialData
// {
// private Set<Actuator.SerialData> _actuator_data_set = new HashSet<Actuator.SerialData>();
//
// @Override
// public Arm Deserialize(final SerialObject.SerialManager i_sobject_manager)// throws BattletechException
// {
// final Set<Actuator> actuator_set = new HashSet<Actuator>();
// for (Actuator.SerialData actuator_data : _actuator_data_set)
// actuator_set.add(actuator_data.Deserialize(i_sobject_manager));
// return (Arm)i_sobject_manager.TrackSerialObject(new Arm(i_sobject_manager, this, actuator_set), this);
// }
//
// SerialData(final SerialObject.SerialManager i_sobject_manager, final Arm i_arm)
// {
// super(i_sobject_manager, i_arm);
// for (Actuator actuator : i_arm.getActuatorSet())
// _actuator_data_set.add(actuator.Serialize(i_sobject_manager));
// }
// }
// }

// Use _actuator_set, not ICriticalSlot[]
// public battletech.mech.Actuator getActuator(final battletech.mech.Actuator.TYPE i_actuator_type)
// {
// ICriticalSlotable[] critical_slotable_list = getCriticalSlotList();
// for(int i = 0;i < critical_slotable_list.length;++i)
// if (critical_slotable_list[i] instanceof battletech.mech.Actuator)
// return (battletech.mech.Actuator)critical_slotable_list[i];
// // Fall-through: actuator not found
// return null;
// }
